let baseURL = 'http://m.shuabanli.com:48080';

// 不需要 token 的接口白名单
const noAuthUrls = ['/app-api/member/auth/login', '/app-api/member/auth/sendEmailCode',
	'/app-api/member/auth/register'
];

const Request = (options) => {
	return new Promise((resolve, reject) => {
		// 获取 token
		let token = uni.getStorageSync("token") || '';
		// 如果当前请求不在白名单且没有 token，跳转到登录页面
		if (!noAuthUrls.includes(options.url) && !token) {
			uni.showToast({
				title: '请先登录！',
				icon: 'none'
			});
			setTimeout(() => {
				uni.reLaunch({
					url: '/pages/login/index' // 跳转到登录页面
				});
			}, 1000);
			return reject(new Error('用户未登录')); // 终止请求并返回错误
		}
		// 准备数据和请求头
		let data = options.data || {};
		const isFormData = options.isFormData || false;
		let headers = {
			'Content-Type': isFormData ? 'application/x-www-form-urlencoded' : 'application/json',
			Authorization: token, // 将 token 加入请求头
			...options.header // 允许合并额外的请求头
		};

		// 统一的错误提示封装
		const showErrorToast = (msg) => {
			uni.showToast({
				title: msg || '请求失败',
				icon: 'none'
			});
		};

		// 发起网络请求
		uni.request({
			url: baseURL + options.url, // 构建完整的请求 URL
			method: options.method || 'GET', // 默认为 GET 方法
			data: data,
			header: headers,
			timeout: options.timeout || 10000, // 增加超时设置，默认 10 秒
			success: (res) => {
				if (res.data.code == 0) {
					// 请求成功
					if (options.ismsg == true) {
						uni.showToast({
							title: res.data.msg || '操作成功',
							icon: 'none'
						});
					}
					resolve(res.data); // 返回成功数据
				} else {
					if (res.data.code == 401 && res.data.msg == '账号未登录') {
						uni.removeStorageSync('token');
						setTimeout(() => {
							uni.reLaunch({
								url: '/pages/login/index'
							})
						}, 1000)
					} else {
						if (options.ismsg == true) {
							uni.showToast({
								title: res.data.msg || '操作成功',
								icon: 'none'
							});
						}
						reject(new Error(`HTTP 错误: ${res.data.msg}`));
					}
				}
			},
			fail: (err) => {
				// 网络错误或其他问题
				showErrorToast('网络错误');
				console.error('网络错误', err); // 输出详细的错误信息
				reject(err);
			},
		});
	});
};

export default Request;